home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Chans / fax / ps250 / ps250_trans.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  4.0 KB  |  239 lines

  1. /* fax_trans.c: wrappers around basic ps 250 functions */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Chans/fax/ps250/RCS/ps250_trans.c,v 6.0 1991/12/18 20:07:26 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Chans/fax/ps250/RCS/ps250_trans.c,v 6.0 1991/12/18 20:07:26 jpo Rel $
  9.  *
  10.  * $Log: ps250_trans.c,v $
  11.  * Revision 6.0  1991/12/18  20:07:26  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "util.h"
  17. #include "ps250.h"
  18.  
  19. /*
  20.  * wrap up and initialise the tranmission parameters 
  21.  */ 
  22. extern char    *get_com_str();
  23. extern int    fax_debug;
  24.  
  25. int    fax_trans (fd, tp)
  26. int    fd;
  27. Trans    *tp;
  28. {
  29.     Faxcomm fc;
  30.     char    *cp;
  31.     int    len;
  32.  
  33.     fc.flags = 0;
  34.     fc.command = COM_TRANS;
  35.     cp = fc.data;
  36.     fc.len = 0;
  37.     *cp ++ = tp -> src_type | tp -> src_addr;
  38.     fc.len ++;
  39.     *cp ++ = tp -> dst_type | tp -> dst_addr;
  40.     fc.len ++;
  41.     *cp ++ = tp -> param1;
  42.     fc.len ++;
  43.     *cp ++ = tp -> param2;
  44.     fc.len ++;
  45.     len = strlen (tp -> telno);
  46.     if (len >= FAX_TELNOSIZE)
  47.         return NOTOK;
  48.     strcpy (cp, tp -> telno);
  49.     len ++;
  50.     cp += len;
  51.     fc.len += len;
  52.     if (tp -> remid[0]) {
  53.         bcopy (tp -> remid, cp, FAX_REMIDSIZE);
  54.         fc.len += FAX_REMIDSIZE;
  55.     }
  56.     else {
  57.         *cp++ = 0;
  58.         fc.len ++;
  59.     }
  60.  
  61.     return fax_writepacket (fd, &fc);
  62. }
  63.  
  64. int    fax_revpl (fd, tp)
  65. int    fd;
  66. Trans    *tp;
  67. {
  68.     Faxcomm fc;
  69.     char    *cp;
  70.     int    len;
  71.  
  72.     fc.flags = 0;
  73.     fc.command = COM_REVPL;
  74.     cp = fc.data;
  75.     fc.len = 0;
  76.     *cp ++ = tp -> src_type | tp -> src_addr;
  77.     fc.len ++;
  78.     *cp ++ = tp -> dst_type | tp -> dst_addr;
  79.     fc.len ++;
  80.     *cp ++ = tp -> param1;
  81.     fc.len ++;
  82.     *cp ++ = tp -> param2;
  83.     fc.len ++;
  84.     len = strlen (tp -> telno);
  85.     if (len >= FAX_TELNOSIZE)
  86.         return NOTOK;
  87.     strcpy (cp, tp -> telno);
  88.     len ++;
  89.     cp += len;
  90.     fc.len += len;
  91.     if (tp -> remid[0]) {
  92.         bcopy (tp -> remid, cp, FAX_REMIDSIZE);
  93.         fc.len += FAX_REMIDSIZE;
  94.     }
  95.     else {
  96.         *cp++ = 0;
  97.         fc.len ++;
  98.     }
  99.  
  100.     return fax_writepacket (fd, &fc);
  101. }
  102.  
  103. int    fax_move (fd, tp)
  104. int    fd;
  105. Trans    *tp;
  106. {
  107.     Faxcomm    fc;
  108.     char    *cp;
  109.  
  110.     fc.flags = 0;
  111.     fc.command = COM_MOVE;
  112.     fc.len = 4;
  113.     cp = fc.data;
  114.     *cp++ = tp -> src_type | tp -> src_addr;
  115.     *cp++ = tp -> dst_type | tp -> dst_addr;
  116.     *cp++ = tp -> param1;
  117.     *cp++ = 0;
  118.     return fax_writepacket (fd, &fc);
  119. }
  120.  
  121. /*
  122.  * send data to fax 
  123.  */
  124.  
  125. fax_write (fd, data, len, flags)
  126. int    fd;
  127. char    *data;
  128. int    len, flags;
  129. {
  130.     Faxcomm fc;
  131.  
  132.     fc.flags = 0;
  133.     fc.len = len + 1;
  134.     fc.command = COM_WRITE;
  135.     fc.data[0] = flags;
  136.     bcopy (data, &fc.data[1], len);
  137.     return fax_writepacket (fd, &fc);
  138. }
  139.  
  140. /*
  141.  * request data from fax
  142.  */
  143.  
  144. fax_read(fd, ok)
  145. int    fd, ok;
  146. {
  147.     char    *cp, buffer[FAXBUFSIZ];
  148.     
  149.     cp = buffer;
  150.     *cp ++ = FAX_HEADER;
  151.     *cp ++ = FAX_HEADER;
  152.     if (ok)
  153.         *cp ++ = FAX_CONTROL;
  154.     else
  155.         *cp ++ = FAX_RETRANS;
  156.     *cp ++ = FAX_ADDRESS;
  157.     *cp ++ = 1;
  158.     *cp ++ = COM_READ;
  159.     *cp = fax_checksum (buffer, cp - buffer);
  160.     *cp++;
  161.     if (writex (fd, buffer, cp - buffer) != cp - buffer)
  162.         return NOTOK;
  163.     return OK;
  164. }    
  165.  
  166. fax_data (fd, data)
  167. int    fd;
  168. Data    *data;
  169. {
  170.     Faxcomm    fc;
  171.  
  172.     if (fax_readpacket(fd, &fc) == NOTOK)
  173.         return NOTOK;
  174.     if (fc.command != RESP_DATA) 
  175.         return NOTOK;    
  176.     fax_fc2data(&fc, data);
  177.     return OK;
  178. }
  179.  
  180. /*
  181.  * read response from fax
  182.  */
  183.  
  184. int fax_getresp(fd, st1)
  185. int    fd;
  186. Stat1    *st1;
  187. {
  188.     Faxcomm fc;
  189.     int    retval = NOTOK;
  190.  
  191.     if (fax_readpacket (fd, &fc) == NOTOK)
  192.         return NOTOK;
  193.     switch (fc.command) {
  194.         case RESP_ACK:
  195. /*        if (fax_debug)
  196.             printf("=> ACK ");*/
  197.         retval = OK;
  198.         break;
  199.         case RESP_STAT1:
  200.         if (fax_debug) 
  201.             PP_LOG(LLOG_DEBUG,
  202.                    ("fax_getresp: STAT1"));
  203.         retval = OK;
  204.         fax_fc2stat1 (&fc, st1);
  205.         if (fax_debug)
  206.             fax_pstat1 (st1);
  207.         break;
  208.         case RESP_REJ:
  209.         if (fax_debug) 
  210.             PP_LOG(LLOG_NOTICE,
  211.                    ("fax_getresp: REJ"));
  212.         fax_fc2stat1 (&fc, st1);
  213.         if (fax_debug)
  214.             fax_pstat1 (st1);
  215.         if (st1->ce_code != COMERR_OK)
  216.             PP_LOG(LLOG_EXCEPTIONS,
  217.                    ("Command code: %s", get_com_str(st1->ce_code)));
  218.         if (st1->fecode[0])
  219.             PP_LOG(LLOG_EXCEPTIONS,
  220.                    ("Fax error code: %s", 
  221.                 faxerr2str(atoi(st1->fecode))));
  222.         break;
  223.         case RESP_STAT2:
  224.         if (fax_debug) 
  225.             PP_LOG(LLOG_DEBUG,
  226.                    ("fax_getresp: STAT2"));
  227.         break;
  228.         case RESP_DATA:
  229.         if (fax_debug) 
  230.             PP_LOG(LLOG_DEBUG,
  231.                    ("fax_getresp: DATA"));
  232.         break;
  233.     }
  234.     if (retval == NOTOK)
  235.         return retval;
  236.     return fc.command;
  237. }
  238.         
  239.